Java Technologies Serialization এবং Deserialization Example: Object Serialization এবং Deserialization গাইড ও নোট

434

Serialization এবং Deserialization হল দুটি গুরুত্বপূর্ণ প্রক্রিয়া যা Java তে অবজেক্ট ডেটাকে সংরক্ষণ এবং পুনরুদ্ধারের জন্য ব্যবহৃত হয়।

  1. Serialization: এটি একটি প্রক্রিয়া যেখানে Java অবজেক্টটিকে বাইনারি ফরম্যাটে বা স্টোরেজে (ফাইল, ডাটাবেস, নেটওয়ার্ক, ইত্যাদি) সেভ করা হয়।
  2. Deserialization: এটি হলো সেই প্রক্রিয়া যেখানে একটি সিরিয়ালাইজড অবজেক্ট থেকে ডেটা পুনরুদ্ধার করা হয় এবং একটি অবজেক্টে ফিরিয়ে আনা হয়।

Java তে Serialization এর জন্য Serializable ইন্টারফেস এবং Deserialization এর জন্য ObjectInputStream ব্যবহার করা হয়।

Java Serialization and Deserialization Example

Step 1: Create a Serializable Class

প্রথমে একটি ক্লাস তৈরি করতে হবে যেটি Serializable হবে, অর্থাৎ সেই ক্লাসের অবজেক্টকে সিরিয়ালাইজ করা যাবে। ক্লাসে Serializable ইন্টারফেস ইমপ্লিমেন্ট করতে হয়।

Example:

import java.io.*;

// Class must implement Serializable interface to be serialized
class Person implements Serializable {
    private static final long serialVersionUID = 1L; // Serialization version ID

    private String name;
    private int age;

    // Constructor
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getters
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    // ToString Method
    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + '}';
    }
}

Explanation:

  • Person ক্লাস Serializable ইন্টারফেসটি ইমপ্লিমেন্ট করেছে, তাই এর অবজেক্টটি সিরিয়ালাইজ করা যাবে।
  • serialVersionUID একটি ইউনিক আইডি যা সিরিয়ালাইজড অবজেক্টের সংস্করণ চিহ্নিত করে। এটি সুনির্দিষ্টভাবে দেওয়া হলে, পরবর্তীতে যে কোনো সমস্যা ছাড়াই ডেসিরিয়ালাইজ করা যাবে।

Step 2: Serialize the Object

এখন আমরা Person অবজেক্ট সিরিয়ালাইজ করব এবং একটি ফাইলে লিখব।

import java.io.*;

public class SerializationExample {
    public static void main(String[] args) {
        // Creating a Person object
        Person person = new Person("Alice", 30);

        // Serialize the person object to a file
        try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
            out.writeObject(person);
            System.out.println("Object has been serialized.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Explanation:

  • ObjectOutputStream: এটি ব্যবহার করা হয়েছে person অবজেক্টটি একটি ফাইলে (এখানে person.ser) সিরিয়ালাইজ করতে।
  • অবজেক্ট সিরিয়ালাইজ করার জন্য writeObject() মেথড ব্যবহার করা হয়েছে।
  • try-with-resources ব্যবহার করে স্বয়ংক্রিয়ভাবে স্ট্রিম বন্ধ করা হচ্ছে।

Step 3: Deserialize the Object

এখন আমরা সেই person.ser ফাইল থেকে অবজেক্টটি ডেসিরিয়ালাইজ (পুনরুদ্ধার) করব এবং পুনরায় একটি Person অবজেক্টে রূপান্তরিত করব।

import java.io.*;

public class DeserializationExample {
    public static void main(String[] args) {
        // Deserialize the person object from the file
        try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("person.ser"))) {
            Person person = (Person) in.readObject();
            System.out.println("Object has been deserialized.");
            System.out.println(person);  // Print the deserialized object
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Explanation:

  • ObjectInputStream: এটি ব্যবহার করা হয়েছে person.ser ফাইল থেকে অবজেক্টটি ডেসিরিয়ালাইজ করতে।
  • readObject(): এই মেথডের মাধ্যমে সিরিয়ালাইজড অবজেক্টটি ডেসিরিয়ালাইজ করা হচ্ছে।
  • অবজেক্টটি ডেসিরিয়ালাইজ করার পর, আমরা System.out.println() ব্যবহার করে সেটির মান প্রিন্ট করেছি।

Complete Workflow:

  1. Serialization:
    • প্রথমে Person অবজেক্টটি তৈরি করা হয় এবং ObjectOutputStream এর মাধ্যমে person.ser ফাইলে সিরিয়ালাইজ করা হয়।
  2. Deserialization:
    • পরবর্তীতে, ObjectInputStream ব্যবহার করে person.ser ফাইল থেকে অবজেক্টটি ডেসিরিয়ালাইজ করা হয় এবং আবার Person অবজেক্টে পুনরুদ্ধার করা হয়।

Output:

Serialization Output:

Object has been serialized.

Deserialization Output:

Object has been deserialized.
Person{name='Alice', age=30}

Considerations and Best Practices:

  1. serialVersionUID:
    • এটি ক্লাসের একটি বিশেষ আইডি যা সিরিয়ালাইজড অবজেক্টের সংস্করণ চিহ্নিত করতে ব্যবহৃত হয়। এটি গুরুত্বপূর্ণ যখন আপনি আপনার ক্লাসের গঠন পরিবর্তন করেন (যেমন ফিল্ড বা মেথড যোগ করা বা পরিবর্তন করা), যাতে পূর্ববর্তী সিরিয়ালাইজড ডেটার সাথে সামঞ্জস্য বজায় থাকে।
  2. Transient Keyword:

    • যদি কোনো ফিল্ড সিরিয়ালাইজ করতে না চান, তবে transient কিওয়ার্ড ব্যবহার করতে পারেন। এই ফিল্ডটি সিরিয়ালাইজেশন প্রক্রিয়ায় উপেক্ষা করা হবে।

    Example:

    private transient int password; // This will not be serialized
    
  3. Security:
    • Serialization-এ নিরাপত্তা ঝুঁকি থাকতে পারে। আপনি যদি ডেটা অপরিচিত সোর্স থেকে ডেসিরিয়ালাইজ করেন, তাহলে সাবধান থাকতে হবে। অপ্রত্যাশিত বা ক্ষতিকারক অবজেক্ট ইনজেকশন হতে পারে।
  4. Performance:
    • Serialization কিছুটা সময়সাপেক্ষ হতে পারে এবং খুব বড় অবজেক্টের ক্ষেত্রে memory ব্যবহারে সমস্যা তৈরি করতে পারে। তাই বড় অবজেক্টগুলোর ক্ষেত্রে পারফরম্যান্স নিয়ে চিন্তা করা উচিত।
  • Serialization এবং Deserialization দুটি শক্তিশালী পদ্ধতি যা Java তে অবজেক্ট ডেটা সেভ এবং পুনরুদ্ধারের জন্য ব্যবহৃত হয়।
  • Custom Serializable ক্লাস তৈরি করে এবং ObjectOutputStreamObjectInputStream ব্যবহার করে আপনি সহজেই অবজেক্টকে ফাইলে সেভ এবং পুনরুদ্ধার করতে পারবেন।
  • serialVersionUID, transient, এবং security considerations সহ কিছু গুরুত্বপূর্ণ বিষয় রয়েছে, যা অবশ্যই মাথায় রাখতে হবে।
Content added By
Promotion

Are you sure to start over?

Loading...